const UserDao = require('../database/UserDao');
const ArticleDao = require('../database/ArticleDao');
class ArticleController {
  constructor(pool) {
    this.userDao = new UserDao(pool);
    this.articleDao = new ArticleDao(pool);
  }

  // 获取自己的收购公告列表(已测试)
  async getArticles(req, res) {
    const { page = 1, pageSize = 10 } = req.query; // 默认page=1, pageSize=10
    const { userId } = req.user; // 获取 userId

    try {
      const { articles } = await this.articleDao.getArticles(page, pageSize, userId); // 获取分页数据
      res.json({
        code: 200,
        msg: "获取成功",
        data: articles // 返回文章数据
      });
    } catch (err) {
      console.error(err); // 打印错误到控制台，便于调试
      res.status(500).json({ code: 500, msg: '服务器错误', error: err.message });
    }
  }

  // 获取全部收购公告（已过滤过期公告）(已测试)
  async getAllArticles(req, res) {
    try {
      const articles = await this.articleDao.getAllArticles(); // 获取全部未过期公告
      res.json({
        code: 200,
        msg: "获取成功",
        data: articles
      });
    } catch (err) {
      console.error(err); // 打印错误日志
      res.status(500).json({ code: 500, msg: '服务器错误', error: err.message });
    }
  }

  // 获取经销商发布的收购公告
  async getDealerArticles(req, res) {
    try {
        const articles = await this.articleDao.getDealerArticles();
        res.json({
          code: 200,
          msg: "获取成功",
          data: articles // 返回文章数据
        });
    } catch (error) {
      console.log(error);
        res.status(500).json({ message: "获取经销商公告失败", error });
    }
  }

  // 获取政府发布的收购公告
  async getGovArticles(req, res) {
      try {
          const articles = await this.articleDao.getGovArticles();
          res.json({
            code: 200,
            msg: "获取成功",
            data: articles // 返回文章数据
          });
      } catch (error) {
          res.status(500).json({ message: "获取政府公告失败", error });
      }
  }

  //根据内容搜索公告
  async searchArticles(req, res) {
    const { title, role } = req.query;

    if (!title || !role) {
        return res.status(400).json({ code: 400, msg: "缺少必要参数" });
    }

    try {
        const articles = await this.articleDao.searchArticles(title, role);
        res.json({ code: 200, msg: "查询成功", data: articles });
    } catch (err) {
        console.error(err);
        res.status(500).json({ code: 500, msg: "服务器错误", error: err.message });
    }
}



  // 发布收购公告
  async createArticle(req, res) {
    const { title, content, product_name,
       product_category, price_offer, total_quantity,
        remaining_quantity, region, deadline } = req.body;
    const { userId } = req.user; // 从 req.user 中获取 userId
    
    try {
      // 查询用户角色
      const userRole = await this.userDao.getUserRole(userId);
      console.log(userRole);
      // 检查是否为经销商发布公告
      if (userRole !== "dealer" && userRole !== "gov") {
        return res.status(403).json({ code: 403, msg: '无权限发布公告' });
      }
      
      await this.articleDao.createArticle(
        title,
        content,
        product_name,
        product_category,
        price_offer,
        total_quantity,
        remaining_quantity,
        region,
        deadline,
        userId
      );

      res.json({
        code: 200,
        msg: "添加成功",
        data: null
      });
    } catch (err) {
      console.error(err); // 打印错误到控制台，便于调试
      res.status(500).json({ code: 500, msg: '服务器错误', error: err.message });
    }
  }

  // 修改收购公告（延长和截止都公用这个）
  async updateArticle(req, res) {
    const { article_id, deadline } = req.body;
    const { userId } = req.user;

    try {
      const result = await this.articleDao.updateArticle(article_id, deadline, userId);
      res.json({
        code: 200,
        msg: "修改成功",
        data: result
      });
    } catch (err) {
      console.error(err); // 打印错误到控制台，便于调试
      res.status(500).json({ code: 500, msg: '服务器错误', error: err.message });
    }
  }

  // 通过ID获取单个公告详情
  async getArticleById(req, res) {
    const { article_id } = req.query; // 从URL查询参数中获取article_id

    try {
      const article = await this.articleDao.getArticleById(article_id);
      res.json({
        code: 200,
        msg: "获取成功",
        data: article
      });
    } catch (err) {
      console.error(err); // 打印错误到控制台，便于调试
      res.status(500).json({ code: 500, msg: '服务器错误', error: err.message });
    }
  }
}

module.exports = ArticleController;
